import Vue from 'vue'

/**
 * 文字省略模式
 */
let LineBreakMode = {
	WrappingTruncatingTail: 1, // 显示头部文字内容，其他直接截断。
	WrappingTruncatingHead: 2, // 显示尾部文字内容，其他直接截断。
	EllipsisTruncatingTail: 3, // 结尾部分的内容以……方式省略，显示头的文字内容。
	EllipsisTruncatingMiddle: 4, // 中间的内容以……方式省略，显示头尾的文字内容。
	EllipsisTruncatingHead: 5 // 前面部分文字以……方式省略，显示尾部文字内容。
}

/**
 * 映射tag颜色
 */
function mapTagColor(index) {
	switch (index % 4) {
		case 0:
			return 'primary'
		case 1:
			return 'success'
		case 2:
			return 'error'
		case 3:
			return 'warning'
		default:
			return 'default'
	}
}

/**
 * 热力映射tag颜色
 */
function heatTagColor(index) {
	switch (index % 4) {
		case 0:
			return 'primary'
		case 1:
			return 'success'
		case 2:
			return 'warning'
		case 3:
			return 'error'
		default:
			return 'default'
	}
}

/**
 * [Datestr 时间戳转字符串格式]
 */
function socialDateFormat(date) {
	// 获取js 时间戳
	let time = new Date().getTime()
	// 去掉 js 时间戳后三位
	time = parseInt((time - date) / 1000)
	// 存储转换值
	let s
	if (time < 60 * 10) { // 十分钟内
		return '刚刚'
	} else if ((time < 60 * 60) && (time >= 60 * 10)) {
		// 超过十分钟少于1小时
		s = Math.floor(time / 60)
		return s + '分钟前'
	} else if ((time < 60 * 60 * 24) && (time >= 60 * 60)) {
		// 超过1小时少于24小时
		s = Math.floor(time / 60 / 60)
		return s + '小时前'
	} else if ((time < 60 * 60 * 24 * 3) && (time >= 60 * 60 * 24)) {
		// 超过1天少于3天内
		s = Math.floor(time / 60 / 60 / 24)
		return s + '天前'
	} else {
		// 超过3天
		date = new Date(parseInt(date))
		return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
	}
}

let constMixin = {
	data() {
		return {
			// 默认分页每页数量
			default_limit_size: 10
		}
	},
	filters: {
		// 用于映射标签颜色
		mapTagColor: function(index) {
			return mapTagColor(index)
		},
		// 用于映射热力标签颜色
		heatTagColor: function(index) {
			return heatTagColor(index)
		},
		// 用于格式化时间的过滤器
		socialDate: function(formatedDate) {
			return socialDateFormat(formatedDate)
		},
		// 去除html标签
		filterHtml: function(text) {
			if (!text) {
				return text
			}
			return text.replace(/<.+?>/g, '')
		},
		// 用于处理行尾省略号的过滤器
		textLineBreak: function(text, maxLength, lineBreakMode) {
			if (text === undefined || text === null || text.length === 0) {
				return ''
			}
			if (lineBreakMode === null || lineBreakMode === undefined) {
				lineBreakMode = LineBreakMode.EllipsisTruncatingTail
			}
			switch (lineBreakMode) {
				case LineBreakMode.WrappingTruncatingTail:
					return text.substr(0, maxLength)
				case LineBreakMode.WrappingTruncatingHead:
					return text.substr(-maxLength)
				case LineBreakMode.EllipsisTruncatingTail:
					return text.substr(0, maxLength) + (text.length > maxLength ? '...' : '')
				case LineBreakMode.EllipsisTruncatingMiddle:
					let resultText = text.substr(0, maxLength)
					if (text.length > maxLength) {
						return resultText.substr(0, parseInt(maxLength / 2)) + '...' + resultText.substr(parseInt(maxLength / 2))
					}
					return resultText
				case LineBreakMode.EllipsisTruncatingHead:
					return (text.length > maxLength ? '...' : '') + text.substr(-maxLength)
			}
			return text
		}
	}
}

Vue.mixin(constMixin)
